//
//  Date+FormatStr.swift
//  CLExtension
//
//  Created by CharlieLiao on 2017/8/4.
//  Copyright © 2017年 Charlie. All rights reserved.
//

fileprivate let dateFormatter = DateFormatter()
fileprivate let clCalendar = Calendar(identifier: .gregorian)

extension NSDate {
    
    @objc class var cl_DateFormatter: DateFormatter {
        return dateFormatter
    }
    
    class var cl_Calendar: Calendar {
        return clCalendar
    }
}

extension Date
{
    /// 根据格式返回日期时间字符串 如：yyyy-MM-dd HH:mm:ss
    public func toString(format dateFormat: String) -> String
    {
        let dateFormatter = NSDate.cl_DateFormatter
        objc_sync_enter(dateFormatter)
        dateFormatter.dateFormat = dateFormat
        let str = dateFormatter.string(from: self)
        objc_sync_exit(dateFormatter)
        return str
    }
    
    /// 返回日期时间字符串 如：yyyy-MM-dd HH:mm:ss.SSS
    public var toMSString: String
    {
        return self.toString(format: "yyyy-MM-dd HH:mm:ss.SSS")
    }
    
    /// 返回日期时间字符串 如：yyyy-MM-dd HH:mm:ss
    public var toString: String
    {
        return self.toString(format: "yyyy-MM-dd HH:mm:ss")
    }
    
    /// 返回日期时间字符串 如：yyyy-MM-dd HH:mm
    public var toDateTimeString: String
    {
        return self.toString(format: "yyyy-MM-dd HH:mm")
    }
    
    /// 返回日期字符串 如：yyyy-MM-dd
    public var toDateString: String
    {
        return self.toString(format: "yyyy-MM-dd")
    }
    
    /// 返回时间字符串 如：HH:mm
    public var toTimeString: String
    {
        return self.toString(format: "HH:mm")
    }
    
    public static func date(_ str: String, format: String = "yyyy-MM-dd HH:mm:ss") -> Date? {
        //
        guard !format.isEmpty else {
            return nil
        }
        
        let dateFormatter = NSDate.cl_DateFormatter
        objc_sync_enter(dateFormatter)
        dateFormatter.dateFormat = format
        let date = dateFormatter.date(from: str)
        objc_sync_exit(dateFormatter)
        return date
    }
}

